<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <h3>案例：全选、小选、反选</h3>
        <input type="checkbox" v-model="chkAll">全选
        <hr>
        <div>
            <div v-for="(item,index) in list" :key="index">
                <input type="checkbox" v-model="item.isCheck"> {{ item.name }}
            </div>
        </div>
    </div>

    <script src="./vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {

                list: [
                    { name: '可爱多', isCheck: false },
                    { name: '可乐', isCheck: false },
                    { name: '橙汁', isCheck: false },
                    { name: '椰汁', isCheck: false },
                ],
            },
            computed: {
                // // 简写形式:只有对计算属性取值，没有赋值，就意味着界面改变不会影响数据
                // chkAll () {
                //     // 数组中每一项都选中(true)，才能return true
                //     // 但凡有一个没选中(false) 都要return false
                //     return this.list.every( v => v.isCheck)
                // }

                // 完整形式
                chkAll: {
                    set (val) {
                        // 全选是true，让list里的每一项也为true
                        // 全选是false，让list每一项都为false
                        this.list.forEach(v => v.isCheck = val)
                    },
                    // 对计算属性取值
                    get () {
                        return this.list.every( v => v.isCheck)
                    }
                }
            }
        })
    </script>
</body>

</html>